import {
	HTTP_REQUEST_URL,
	HEADER,
	TOKENNAME,
	HEADERPARAMS,
} from "@/config/app";
import {
	toLogin
} from "./login";
import {
	Toast
} from "./utils.js";
import store from "../store";
/**
 * 发送网络请求
 * @param {string} url - 请求的 API 地址
 * @param {string} method - 请求方法（默认为 'GET'）
 * @param {Object} data - 请求数据（默认为空对象）
 * @param {Object} options - 可选参数，包含 noAuth（是否需要授权）和 params（是否使用特殊 header）
 * @returns {Promise} - 返回 Promise 对象
 */
function baseRequest(url, method = "GET", data = {}, options = {}) {
	const {
		noAuth = false, params = false
	} = options;
	let finalHeader = params ? HEADERPARAMS : HEADER;
	const token = uni.getStorageSync("userInfo").token;
	// const token = '1379492b-8bbf-4f24-9619-37573150ef58'
	if (!noAuth && !token) {
		console.log(url);
		// 如果需要授权但没有 token，则跳转到登录页面
		toLogin();
		return Promise.reject(new Error("未登录，请登录后重试"));
	}
	if (!noAuth) {
		// 添加 token 到 header 中
		finalHeader[TOKENNAME] = token;
	}
	finalHeader['cun-id'] = '1';
	return new Promise((resolve, reject) => {
		uni.request({
			url: `${HTTP_REQUEST_URL}${url}`,
			method: method,
			header: finalHeader,
			data: data,
			success: (res) => {
				if (res.statusCode === 200) {
					const {
						code,
						...restData
					} = res.data;
					if (code === 1) {
						resolve({
							data: restData,
							response: res,
						});
					} else if (code === 401) {
						// 处理 token 无效的情况
						toLogin();
						reject(new Error("Token 无效，请重新登录"));
					} else {
						Toast(res.data.msg);
						reject(new Error(res.data.msg));
					}
				} else {
					reject(new Error("请求失败"));
				}
			},
			fail: (err) => {
				// 请求失败时的处理
				reject(new Error(err.message));
			},
		});
	});
}

// 创建请求方法对象
const requestMethods = [
	"options",
	"get",
	"post",
	"put",
	"head",
	"delete",
	"trace",
	"connect",
];
const request = {};
requestMethods.forEach((method) => {
	request[method.toLowerCase()] = (api, data, options, params) => {
		return baseRequest(api, method, data, options, params);
	};
});

export default request;